aboutsummaryrefslogtreecommitdiff
path: root/src/routes/grocery/[id]/+page.server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/grocery/[id]/+page.server.ts')
-rw-r--r--src/routes/grocery/[id]/+page.server.ts71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/routes/grocery/[id]/+page.server.ts b/src/routes/grocery/[id]/+page.server.ts
new file mode 100644
index 0000000..88aa137
--- /dev/null
+++ b/src/routes/grocery/[id]/+page.server.ts
@@ -0,0 +1,71 @@
+import { error, fail, redirect } from '@sveltejs/kit';
+import { db } from '$lib/server/db';
+import { groceries, categories, references } from '$lib/server/db/schema';
+import { eq } from 'drizzle-orm';
+import type { Actions, PageServerLoad } from './$types';
+
+export const load: PageServerLoad = async ({ params }) => {
+ const id = Number(params.id);
+
+ const [item] = await db.select().from(groceries).where(eq(groceries.id, id));
+ if (!item) throw error(404, 'Item not found');
+
+ const [cat] = item.categoryId
+ ? await db
+ .select()
+ .from(categories)
+ .where(eq(categories.id, item.categoryId))
+ : [null];
+
+ const refs = await db
+ .select()
+ .from(references)
+ .where(eq(references.groceryId, id));
+
+ return {
+ item: {
+ ...item,
+ categoryName: cat?.name ?? null,
+ },
+ references: refs,
+ };
+};
+
+export const actions: Actions = {
+ add: async ({ request, params }) => {
+ const data = await request.formData();
+ const brand = data.get('brand')?.toString().trim();
+ const price = data.get('price')?.toString().trim();
+ const unit = data.get('unit')?.toString().trim();
+ const qualityScore = data.get('quality_score')?.toString().trim();
+
+ if (!brand) {
+ return fail(400, { error: 'Brand is required' });
+ }
+
+ await db.insert(references).values({
+ groceryId: Number(params.id),
+ brand,
+ price: price ? Number(price) : null,
+ unit: unit || null,
+ qualityScore: qualityScore ? Number(qualityScore) : null,
+ });
+
+ return { success: true };
+ },
+
+ delete: async ({ request }) => {
+ const data = await request.formData();
+ const id = Number(data.get('id'));
+
+ await db.delete(references).where(eq(references.id, id));
+
+ return { success: true };
+ },
+
+ deleteItem: async ({ params }) => {
+ await db.delete(groceries).where(eq(groceries.id, Number(params.id)));
+
+ throw redirect(303, '/');
+ },
+};